package com.example.demo.mapper;

import com.example.demo.entity.ArticleInfo;
import com.example.demo.entity.vo.ArticleInfoVo;
import org.apache.catalina.LifecycleState;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface ArticleMapper {
    //添加文章
    int add(ArticleInfo articleInfo);
    //根据id查询文章，通过uid确定作者
    ArticleInfo getDetailByIdAndUid(@Param("id")Integer id ,@Param("uid")Integer uid);

    //根据id修改文章
    int update(ArticleInfo articleInfo);

    //根据文章自增id联表查询
    ArticleInfoVo getDetail(@Param("id") Integer id);

    //阅读量
    int addRCount(@Param("id") Integer id);

    //查询指定用户所有文章数量
    List<ArticleInfo> countArticle(@Param("uid") Integer uid);

    //根据文章id查询文章对象
    ArticleInfo selectArticleById(@Param("id") Integer id);

    //根据用户id查询该用户所有文章
    List<ArticleInfo> getAllArticle(@Param("id")Integer id);

    //删除指定id用户的指定文章
    int del(@Param("id") Integer id,@Param("uid") Integer uid);

    //分页功能
    List<ArticleInfo> getAllArticleByPage(@Param("pageSize") Integer pageSize,
                                          @Param("offset") Integer offset,
                                          @Param("state") Integer state);



   //已发表文章分页
    List<ArticleInfo> getAllArticleByPageFromUser(@Param("pageSize") Integer pageSize, @Param("offset") Integer offset,
                                                  @Param("uid") Integer uid, @Param("state") Integer state);
    //查询文章总数
    int getArticle(@Param("state") Integer state);
    //查询当前用户文章总数
    int getArticleFromUser(@Param("uid") Integer uid,@Param("state")Integer state);
    //根据文章id返回文章作者头像
    ArticleInfoVo getImagePath(@Param("id")Integer id);

    //新增文章，设置2为未发布
    int saveArticle(ArticleInfo articleInfo);

    //查询文章的总条数
    Integer getCount();
    //当前用户未发布文章的总条数
    int getArticleNotSub(@Param("uid") Integer uid, @Param("state")Integer state);
    //自动保存
    int autoSaveArticle(ArticleInfo articleInfo);
    //得到当前用户未发布的文章并分页
    List<ArticleInfo> getAllArticleByPageNotSub(@Param("pageSize") Integer pageSize,
                                                @Param("offset") Integer offset,
                                                @Param("uid") Integer uid,
                                                @Param("state") Integer state);
}
